package com.shanjupay.transaction.api;


import com.shanjupay.common.domain.BusinessException;
import com.shanjupay.transaction.api.dto.PayChannelDTO;
import com.shanjupay.transaction.api.dto.PayChannelParamDTO;
import com.shanjupay.transaction.api.dto.PlatformChannelDTO;

import java.util.List;

/**
 *  支付渠道服务，管理平台支付渠道， 原始支付渠道， 以及相关配置
 *
 */
public interface PayChannelService {


    /**
     *
     *  获取指定应用指定服务类型下所包含的某个原始支付参数
     *
     * @param appId
     * @param platformChannel
     * @param payChannel
     * @return
     * @throws BusinessException
     */
    PayChannelParamDTO queryParamByAppPlatformAndPayChannel(String appId, String platformChannel,String payChannel) throws BusinessException;

    /**
     *   获取指定应用指定服务类型下所包含的原始支付渠道参数列表。
     * @param appId  应用id
     * @param platformChannel  服务类型
     * @return
     * @throws BusinessException
     */
    List<PayChannelParamDTO> queryPayChannelParamByAppAndPlatform(String appId, String platformChannel) throws BusinessException;


    /**
     *  获取平台服务类型
     *
     * @return
     * @throws BusinessException
     */
    List<PlatformChannelDTO> queryPlatformChannel() throws BusinessException;

    /**
     *  为app 绑定平台服务类型
     *
     * @param appId  appId 应用id
     * @param platformChannelCodes  平台服务类型列表
     * @throws BusinessException
     */
    void bindPlatformChannelForApp(String appId, String platformChannelCodes) throws BusinessException;

    /**
     * 根据服务类型查询支付渠道
     *
     * @param platformChannelCode  服务类型的代码
     * @return  支付渠道的列表数据
     */
    List<PayChannelDTO> queryPayChannelByPlatformChannel(String platformChannelCode) throws BusinessException;

    /**
     *  应用是否绑定了某个服务类型
     *
     * @param appId
     * @param platformChannel
     * @return  已绑定返回1 ， 否则 返回0
     * @throws BusinessException
     */
    int queryAppBindPlatformChannel(String appId,String platformChannel) throws BusinessException;

    /**
     *  保存支付渠道参数
     *
     * @param payChannelParamDTO
     * @throws BusinessException
     */
    void savePayChannelParam(PayChannelParamDTO payChannelParamDTO) throws BusinessException;


}
